package com.ClasesGraficas;

/*Activity de ventas primer nivel */

import org.achartengine.chart.PointStyle;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.graphics.Color;

public class VentasN1 {
	//### VARIABLES ###
	
		//Varibles del activity
		
		private XYMultipleSeriesDataset dataset = null;
		private XYMultipleSeriesRenderer mRenderer = null;
		
		//Variables que son pasadas al activity
		private int[] xValues = null;
		private String[] xValuesS = null;
		private double[] yValues = null;
		private String titulo ="";
		
		//### METODOS ###
		
		public XYMultipleSeriesRenderer getmRenderer() {
			return mRenderer;
		}
		
		public void setmRenderer(XYMultipleSeriesRenderer mRenderer) {
			this.mRenderer = mRenderer;
		}
		
		public XYMultipleSeriesDataset getDataset() {
			return dataset;
		}

		public void setDataset(XYMultipleSeriesDataset dataset) {
			this.dataset = dataset;
		}
			
		//tunea las lineas
		public void tuneRender (XYSeriesRenderer render){
			render.setDisplayChartValues(true); //Se muestra valores
			render.setChartValuesTextSize(30); //Tamano de los valores
			render.setChartValuesSpacing(8); //Espacio entre el punto y el valor
			render.setLineWidth(5); //Ancho de linea		
			render.setPointStyle(PointStyle.TRIANGLE); //Punto
			render.setColor(Color.argb(255,250,100,0)); //Color de linea
		}
			
		//tunea la grafica
		@SuppressWarnings("deprecation")
		public void tuneGraphic (XYMultipleSeriesRenderer mRenderer, int tipo){
			getmRenderer().setBarSpacing(1);
			
			//Titulo del reportes
			mRenderer.setChartTitle(titulo);
			mRenderer.setFitLegend(true);
			mRenderer.setChartTitleTextSize(30);
			mRenderer.setLabelsColor(Color.WHITE); //Esto es para todos los labels
			
			//Cuadricula
			mRenderer.setShowGrid(true);
			mRenderer.setGridColor(Color.WHITE);
			if (xValues == null)
				mRenderer.setXLabels(xValuesS.length + 2); //Cantidad de lineas
			else
				mRenderer.setXLabels(xValues.length + 2); //Cantidad de lineas
			mRenderer.setYLabels(yValues.length + 2); //Cantidad de lineas
				
			//Ejes X,Y
			mRenderer.setPanEnabled(true,true); //Habilitar movimiento {x,y}
				
			//Cuadrar la grafica
			mRenderer.setMargins(new int[] {40, 35, 0, 5}); //{arriba, derecha, abajo, izquierda}
			mRenderer.setBackgroundColor(Color.WHITE);
				
			//Leyenda de la grafica
			mRenderer.setLegendTextSize(25);
			mRenderer.setLegendHeight(70);
			mRenderer.setClickEnabled(true);
			mRenderer.setInScroll(true);
			mRenderer.setZoomEnabled(true);

				
			//Centrar las barras
			mRenderer.setYAxisMax(findMaxY(yValues) + getIndicadorMaxY(yValues));
			mRenderer.setYAxisMin(findMinY(yValues) - getIndicadorMinY(yValues));

			if (tipo == 3){
				mRenderer.setXTitle("Años");
				mRenderer.setXAxisMin(0);
				mRenderer.setXAxisMax(xValues.length + 1);
				mRenderer.addXTextLabel(0,"" + (xValues[0] -1));
				for(int i=0;i<xValues.length;i++){
					mRenderer.addXTextLabel(i+1,""+ xValues[i]);
				}
			}
			else if (tipo == 1){
				mRenderer.setXTitle("Meses");	
				mRenderer.setXAxisMin(0);
				mRenderer.setXAxisMax(xValuesS.length + 1);
				for(int i=0;i<xValuesS.length;i++){
					mRenderer.addXTextLabel(i+1, xValuesS[i]);
				}
			}
			else if (tipo == 2){
				mRenderer.setXTitle("Trimestres");	
				mRenderer.setXAxisMin(0);
				mRenderer.setXAxisMax(xValuesS.length + 1);
				for(int i=0;i<xValuesS.length;i++){
					mRenderer.addXTextLabel(i+1, xValuesS[i]);
				}
			}
			mRenderer.setYTitle("VENTAS EN SOLES");
			mRenderer.setAxisTitleTextSize(25);
			mRenderer.setClickEnabled(true);
		}
			
		//Encontrar el minimo de un arreglo
		public int findMin (int[] array){
			int min = array[0];
			for(int i=1;i<array.length;i++)
				if (array[i]<min)
					min = array[i];
			return min;
		}
			
		//Encontrar el maximo de un arreglo
		public int findMax (int[] array){
			int max = array[0];
		for(int i=1;i<array.length;i++)
				if (array[i]>max)
					max = array[i];
			return max;
		}
		
		//Encontrar el maximo de un arreglo
			public double findMaxY (double[] array){
				double max = array[0];
			for(int i=1;i<array.length;i++)
					if (array[i]>max)
						max = array[i];
				return max;
			}
			
		public int getIndicadorMaxY (double [] array){
			double maxY = findMaxY(array);
			int indicador = 1;
			
			while (maxY >= 1)
			{
				maxY /= 10;
				if (maxY>=1)
				indicador *= 10;
			}
			return indicador;
		}
		
		public int getIndicadorMinY (double [] array){
			double minY = findMinY(array);
			int indicador = 1;
			
			while (minY >= 1)
			{
				minY /= 10;
				if (minY>=1)
				indicador *= 10;
			}
			return indicador;
		}
		
		//Encontrar el minimo de un arreglo
		public double findMinY (double[] array){
			double min = array[0];
			for(int i=1;i<array.length;i++)
				if (array[i]<min)
					min = array[i];
			return min;
		}
			
		//Pintar reporte (tipo es: 1= anual, 2= trimestrual/mensual)
		public void ejecutar(int[] x, double[] y, String titulo, int tipo) {
			
			this.xValues = x;
			this.yValues = y;
			this.titulo = titulo;
			dataset = new XYMultipleSeriesDataset();
			mRenderer = new XYMultipleSeriesRenderer();
					
			TimeSeries series = new TimeSeries("Ventas Totales");
			for (int i= 0; i < xValues.length; i++)
			{
				series.add(i+1,yValues[i]);
			}
			dataset.addSeries(series);
			
			XYSeriesRenderer render = new XYSeriesRenderer();
			this.tuneRender(render);
			
			mRenderer.addSeriesRenderer(render);
			this.tuneGraphic(mRenderer, tipo);
		}
		
		//Pintar reporte (tipo es: 1= anual, 2= trimestrual/mensual)
			public void ejecutar(String[] x, double[] y, String titulo, int tipo) {
				
				this.xValuesS = x;
				this.yValues = y;
				this.titulo = titulo;
				dataset = new XYMultipleSeriesDataset();
				mRenderer = new XYMultipleSeriesRenderer();
						
				TimeSeries series = new TimeSeries("Ventas Totales");
				for (int i= 0; i < xValuesS.length; i++)
				{
					series.add(i+1,yValues[i]);
				}
				dataset.addSeries(series);
				
				XYSeriesRenderer render = new XYSeriesRenderer();
				this.tuneRender(render);
				
				mRenderer.addSeriesRenderer(render);
				this.tuneGraphic(mRenderer, tipo);
		}	
}
